package com.enfi.api.modules.db.entity;

import com.enfi.api.modules.db.base.BaseEntity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.NotFound;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import javax.persistence.*;
import java.util.Date;
import java.util.List;


/**
 * (Warning)实体类
 *
 * @author wind
 * @since 2020-04-07 15:56:39
 */
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="t_tbl_warning")
@DynamicInsert
@DynamicUpdate
public class Warning extends BaseEntity<Integer> {
    /**
     * 预警来源 1污水生产预警 2污水水质预警 3供水生产预警 4供水水质预警 5管网预警
     */    
    private Integer source;

    /**
     * 原始ID，即平台方数据ID
     */    
    private String sourceId;

    /**
     * 子公司编码
     */    
    private String officeCode;

    /**
     * 子公司名称
     */    
    private String officeName;

    /**
     * 工厂编码
     */    
    private String factoryCode;

    /**
     * 工厂名称
     */    
    private String factory;

    /**
     * 分项编码，当source=1,3时取对象编码，当source=2,4时取分组
     */    
    private String processCode;

    /**
     * 分项名称，当source=1,3时取对象名称，当source=2,4时取分组
     */    
    private String processName;

    /**
     * 采集项编码，当source=1,3时取采集项编码，当source=2,4时取指标编码
     */    
    private String indexCode;

    /**
     * 采集项名称，当source=1,3时取采集项名称，当source=2,4时取指标名称
     */    
    private String indexName;

    /**
     * 采集标签，当source=1,3时存在，查询历史数据时用
     */    
    private String tagStage;

    /**
     * 等级 1一级 2二级 3三级
     */    
    private Integer level;

    /**
     * 预警标题
     */    
    private String title;

    /**
     * 预警内容
     */    
    private String info;

    /**
     * 预警值
     */    
    private String warningValue;

    /**
     * 当前值
     */    
    private String currValue;

    /**
     * 预警时间 精确时分秒
     */    
    private Date warningTime;

    /**
     * 状态 0:未读 1:已读 2:确认解决 3:提出建议 4:已反馈 5:走专题汇报
     */    
    private Integer status;

    /**
     * 操作人姓名
     */    
    private String operName;

    /**
     * 操作时间 精确时分秒
     */    
    private Date operTime;

    /**
     * 创建时间
     */
    @CreatedDate
    private Date createTime;

    /**
     * 修改时间
     */
    @LastModifiedDate
    private Date updateTime;

    /**
     * 游览人数
     */    
    private Integer viewNum;

    /**
     * 备注
     */    
    private String remarks;

    /**
     * 备注状态
     */    
    private Integer remarksStatus;

    @OneToMany(fetch = FetchType.LAZY,targetEntity = WarningView.class,cascade = {CascadeType.ALL})
    @JoinColumn(name = "warningId")
    @NotFound
    @JsonIgnore
    private List<WarningView> warningViews;
    @OneToMany(fetch = FetchType.LAZY,targetEntity = WarningRole.class,cascade = {CascadeType.ALL})
    @JoinColumn(name = "warningId")
    @NotFound
    @JsonIgnore
    private List<WarningRole>  warningRoles;

    @Transient
    private Integer viewStatus;
    @Transient
    private String code;//接口调用时，传入的code
}